home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Delphi Magazine Collection 2001
/
Delphi Magazine Collection 20001 (2001).iso
/
DISKS
/
ISSUE23
/
STARTUP
/
StubExe32U.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1997-04-06
|
3KB
|
119 lines
unit StubExe32U;
{$ifdef Ver90} //Delphi 2.0x
{$define Delphi2}
{$endif}
{$ifdef Ver93} //C++ Builder 1.0x
{$define Delphi2}
{$endif}
interface
uses
SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
LoadLibBtn: TButton;
ThreadBtn: TButton;
FreeLibBtn: TButton;
procedure LoadLibBtnClick(Sender: TObject);
procedure ThreadBtnClick(Sender: TObject);
procedure FreeLibBtnClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
DllLib: THandle;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.LoadLibBtnClick(Sender: TObject);
begin
WriteLn('APP: "Load Library" button pressed');
DllLib := LoadLibrary('stubdll32.dll');
if DllLib <> 0 then
begin
LoadLibBtn.Enabled := False;
FreeLibBtn.Enabled := True;
end
else
raise EFOpenError.Create('StubDll32.Dll not found');
end;
function ThreadProc(Param: Pointer): Integer;
begin
WriteLn('APP: Thread started');
Result := 0;
WriteLn('APP: Thread stopping');
end;
procedure TForm1.ThreadBtnClick(Sender: TObject);
var
A: DWord;
begin
WriteLn('APP: "Create Thread" button pressed');
BeginThread(nil, 0, ThreadProc, nil, 0, A);
end;
procedure TForm1.FreeLibBtnClick(Sender: TObject);
begin
WriteLn('APP: "Free Library" button pressed');
if DllLib <> 0 then
begin
FreeLibrary(DllLib);
LoadLibBtn.Enabled := True;
FreeLibBtn.Enabled := False;
end;
end;
var
OldInitProc, OldExitProc: Pointer;
procedure NewInitProc;
begin
if OldInitProc <> nil then
TProcedure(OldInitProc);
WriteLn('APP: Entry procedure added via InitProc');
end;
procedure NewExitProc;
begin
ExitProc := OldExitProc;
WriteLn('APP: Exit procedure added the old fashioned way (ExitProc)');
end;
procedure NewerExitProc;
begin
WriteLn('APP: Exit procedure added with AddExitProc');
end;
{$ifndef Delphi2}
function NewTerminateProc: Boolean;
begin
Result := True;
WriteLn('APP: Terminate function added with AddTerminateProc');
end;
{$endif}
initialization
WriteLn('APP: Unit initialisation section');
OldInitProc := InitProc;
InitProc := @NewInitProc;
OldExitProc := ExitProc;
ExitProc := @NewExitProc;
AddExitProc(NewerExitProc);
{$ifndef Delphi2}
AddTerminateProc(NewTerminateProc)
{$endif}
finalization
WriteLn('APP: Unit finalisation section');
end.